package com.ruan.utils;

import com.ruan.common.Code;
import com.ruan.common.Result;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.sms.v20210111.SmsClient;
import com.tencentcloudapi.sms.v20210111.models.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;


//腾讯云短信发送
@Slf4j
@Component
public class SMSUtils {

    private final SMSProperties smsProperties;

    @Autowired
    public SMSUtils(SMSProperties smsProperties) {
        this.smsProperties = smsProperties;
    }


    /**
     * 发送短信验证码
     * @param phone 手机号
     * @param code 验证码
     * @return
     */
    //注册时短信验证码发送 static
    public Result sendCode(String phone, Integer code){

        try{
            // 实例化一个认证对象，入参需要传入腾讯云账户 SecretId 和 SecretKey，此处还需注意密钥对的保密
            // 代码泄露可能会导致 SecretId 和 SecretKey 泄露，并威胁账号下所有资源的安全性。以下代码示例仅供参考，建议采用更安全的方式来使用密钥，请参见：https://cloud.tencent.com/document/product/1278/85305
            // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
//            String SecretId = "AKIDPPEtSowqXzFIIH8oKbw2veCYeW8XEl36";
//            String SecretKey = "twlbCXdVBfx51lJfpmW3OWR9ey5yfARV";
            String SecretId = smsProperties.getSecretId();
            String SecretKey = smsProperties.getSecretKey();
            log.info("获取到SecretId了吗:"+SecretId);
            log.info("获取到SecretKey了吗:"+SecretKey);
            Credential cred = new Credential(SecretId, SecretKey);
            // 实例化一个http选项，可选的，没有特殊需求可以跳过
            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setEndpoint("sms.tencentcloudapi.com");
            // 实例化一个client选项，可选的，没有特殊需求可以跳过
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setHttpProfile(httpProfile);
            // 实例化要请求产品的client对象,clientProfile是可选的
            SmsClient client = new SmsClient(cred, "ap-beijing", clientProfile);
            // 实例化一个请求对象,每个接口都会对应一个request对象
            SendSmsRequest req = new SendSmsRequest();
            String[] phoneNumberSet1 = {"+86"+phone};
            req.setPhoneNumberSet(phoneNumberSet1);

            req.setSmsSdkAppId("1400811864");
            req.setSignName("融融淇乐");//广州柯就科技融融淇乐
            req.setTemplateId("1758224");
            String[] templateParamSet1 = new String[2];
            templateParamSet1[0] = String.valueOf(code);
            templateParamSet1[1] = "5";
            req.setTemplateParamSet(templateParamSet1);
            // 返回的resp是一个SendSmsResponse的实例，与请求对象对应
            SendSmsResponse resp = client.SendSms(req);//发送短信
            // 输出json格式的字符串回包,返回一个 SendSmsResponse 对象，其中包含了发送短信的结果。
            System.out.println("回包: " + SendSmsResponse.toJsonString(resp));
            return new Result(Code.CODE_OK,code,"获取验证码成功！");
        } catch (TencentCloudSDKException e) {
            System.out.println(e.toString());
            return new Result(Code.CODE_ERR,"获取验证码失败！");
        }

    }

    /**
     * 离职审批通过后发送短信通知员工
     * @param phone 手机号
     * @param name 姓名
     * @param resignTime 离职时间
     */
    //static
    public void sendResignSuccess(String phone, String name, String resignTime){
        try{
            // 实例化一个认证对象，入参需要传入腾讯云账户 SecretId 和 SecretKey，此处还需注意密钥对的保密
            // 代码泄露可能会导致 SecretId 和 SecretKey 泄露，并威胁账号下所有资源的安全性。以下代码示例仅供参考，建议采用更安全的方式来使用密钥，请参见：https://cloud.tencent.com/document/product/1278/85305
            // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
//            String SecretId = "AKIDPPEtSowqXzFIIH8oKbw2veCYeW8XEl36";
//            String SecretKey = "twlbCXdVBfx51lJfpmW3OWR9ey5yfARV";
            String SecretId = smsProperties.getSecretId();
            String SecretKey = smsProperties.getSecretKey();
            Credential cred = new Credential(SecretId, SecretKey);
            // 实例化一个http选项，可选的，没有特殊需求可以跳过
            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setEndpoint("sms.tencentcloudapi.com");
            // 实例化一个client选项，可选的，没有特殊需求可以跳过
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setHttpProfile(httpProfile);
            // 实例化要请求产品的client对象,clientProfile是可选的
            SmsClient client = new SmsClient(cred, "ap-beijing", clientProfile);
            // 实例化一个请求对象,每个接口都会对应一个request对象
            SendSmsRequest req = new SendSmsRequest();
            String[] phoneNumberSet1 = {"+86"+phone};
            req.setPhoneNumberSet(phoneNumberSet1);

            req.setSmsSdkAppId("1400811864");
            req.setSignName("融融淇乐");
            req.setTemplateId("1765227");

            String[] templateParamSet1 = {name, resignTime};
            req.setTemplateParamSet(templateParamSet1);

            // 返回的resp是一个SendSmsResponse的实例，与请求对象对应
            SendSmsResponse resp = client.SendSms(req);//发送短信
            // 输出json格式的字符串回包，返回一个 SendSmsResponse 对象，其中包含了发送短信的结果。
            System.out.println("回包: " + SendSmsResponse.toJsonString(resp));
        } catch (TencentCloudSDKException e) {
            System.out.println(e.toString());
        }

    }
}
